---
title: 사용자 정의 지갑
description: 사용자 정의 지갑 생성
---

# 사용자 정의 지갑

## 사용자 정의 지갑 생성

> 참고: 이 API는 안정적이지 않으며 가까운 미래에 변경될 가능성이 있습니다. 시간이 지남에 따라 더 많은 내장 지갑이 추가될 예정입니다. 관심 있는 지갑이 있다면 [알려주세요](https://github.com/rainbow-me/rainbowkit/issues).

`Wallet` 함수 타입은 사용자 정의 지갑을 정의하는 데 도움을 줍니다. 다음 속성들을 `Wallet` 함수의 반환 값에 설정할 수 있습니다.

### 지갑 속성

<PropsTable
  data={[
    {
      name: 'id',
      required: true,
      type: 'string',
      description: '지갑 당 고유 ID',
    },
    {
      name: 'name',
      required: true,
      type: 'string',
      description: '사람이 읽을 수 있는 지갑 이름',
    },
    {
      name: 'rdns',
      required: false,
      type: 'string',
      description: 'EIP6963을 지원하는 지갑의 RDNS',
    },
    {
      name: 'shortName',
      required: false,
      type: 'string | undefined',
      description: '모바일 사용을 위한 선택적 짧은 이름',
    },
    {
      name: 'iconUrl',
      required: true,
      type: 'string | (() => Promise<string>)',
      description:
        '지갑 아이콘의 URL 또는 Base64 데이터 URL로 변환되는 프로미스',
    },
    {
      name: 'iconAccent',
      required: false,
      type: 'string',
      description:
        '브라우저 확장 및 모바일 앱이 있는 지갑의 다운로드 흐름에서 사용되는 강조 색상',
    },
    {
      name: 'iconBackground',
      required: true,
      type: 'string',
      description: '지갑 아이콘 로드 시 배경 색상',
    },
    {
      name: 'installed',
      required: false,
      type: 'boolean | undefined',
      description: (
        <>
          지갑이 설치된 것으로 알려져 있는지 여부 또는 {' '}
          <code>undefined</code>로 불확정인 경우
        </>
      ),
    },
    {
      name: 'downloadUrls',
      required: false,
      type: '{ android?: string, ios?: string, mobile?: string, qrCode?: string, chrome?: string, firefox?: string, edge?: string, safari?: string, opera?: string, browserExtension?: string } | undefined',
      typeSimple: 'DownloadUrls | undefined',
      description: '다운로드 URL을 포함하는 객체',
    },
    {
      name: 'hidden',
      required: false,
      type: '(args: { wallets: Array<{ id: string, connector: Connector, installed?: boolean }> }) => boolean',
      typeSimple: '(args) => boolean | undefined',
      description:
        '지갑 목록에서 이 지갑을 숨기는지 여부를 계산하는 함수입니다. 예를 들어 내장 "Injected Wallet" 대체 기능이 이 특징을 사용합니다',
    },
    {
      name: 'createConnector',
      required: true,
      type: '() => RainbowKitConnector',
      typeSimple: 'RainbowKitConnector',
      description:
        '아래에 설명된 다양한 연결 방법을 위한 커넥터 인스턴스를 제공하기 위한 함수',
    },
    {
      name: 'mobile',
      required: false,
      type: '{ getUri?: (uri: string) => string }',
      typeSimple: 'object',
      description:
        '모바일 지갑 연결 URI를 해결하기 위한 함수',
    },
    {
      name: 'desktop',
      required: false,
      type: '{ getUri?: (uri: string) => string }',
      typeSimple: 'object',
      description: '데스크톱 앱 딥 링크를 해결하기 위한 함수',
    },
    {
      name: 'qrCode',
      required: false,
      type: "{ getUri: (uri: string) => string, instructions?: { learnMoreUrl: string, steps: Array<{ step: 'install' | 'create' | 'scan', title: string, description: string }> }}}",
      typeSimple: 'object',
      description:
        'QR 코드 URI를 해결하기 위한 함수와 선택적 모바일 지갑 설정 지침을 포함하는 객체',
    },
    {
      name: 'extension',
      required: false,
      type: "{ instructions?: { learnMoreUrl: string, steps: Array<{ step: 'install' | 'create' | 'scan', title: string, description: string }> }}}",
      typeSimple: 'object',
      description:
        '선택적 브라우저 확장 설정 지침을 포함하는 객체',
    },
    {
      name: 'createConnector',
      required: true,
      type: "createConnector: (details: WalletDetailsParams) => CreateConnectorFn",
      typeSimple: '(details: WalletDetailsParams) => CreateConnectorFn',
      description: '커넥터 인스턴스를 제공하기 위한 함수',
    },
  ]}
/>

### DownloadUrls 속성

<PropsTable
  data={[
    {
      name: 'android',
      required: false,
      type: 'string',
      description: 'Google Play URL',
    },
    {
      name: 'ios',
      required: false,
      type: 'string',
      description: 'Apple App Store URL',
    },
    {
      name: 'mobile',
      required: false,
      type: 'string',
      description:
        '안드로이드 또는 iOS가 사용할 수 없는 경우 모바일 사용자를 위한 랜딩 페이지',
    },
    {
      name: 'qrCode',
      required: false,
      type: 'string',
      description:
        '모바일 다운로드 QR 코드를 스캔하는 사용자를 위한 랜딩 페이지',
    },
    {
      name: 'chrome',
      required: false,
      type: 'string',
      description: 'Chrome 웹 스토어 URL',
    },
    {
      name: 'edge',
      required: false,
      type: 'string',
      description: 'Microsoft Edge 애드온 URL',
    },
    {
      name: 'firefox',
      required: false,
      type: 'string',
      description: 'Firefox 브라우저 애드온 URL',
    },
    {
      name: 'opera',
      required: false,
      type: 'string',
      description: 'Opera 애드온 URL',
    },
    {
      name: 'safari',
      required: false,
      type: 'string',
      description: 'Mac 앱 스토어 URL',
    },
    {
      name: 'browserExtension',
      required: false,
      type: 'string',
      description:
        '브라우저 호환 URL이 사용할 수 없는 경우 데스크톱 확장 사용자를 위한 랜딩 페이지',
    },
  ]}
/>

### 예시들

예를 들어, WalletConnect를 사용해 사용자 정의 지갑을 생성하려면:

```tsx
import { Wallet, getWalletConnectConnector } from '@rainbow-me/rainbowkit';

export interface MyWalletOptions {
  projectId: string;
}

export const rainbow = ({ projectId }: MyWalletOptions): Wallet => ({
  id: 'my-wallet',
  name: 'My Wallet',
  iconUrl: 'https://my-image.xyz',
  iconBackground: '#0c2f78',
  downloadUrls: {
    android: 'https://play.google.com/store/apps/details?id=my.wallet',
    ios: 'https://apps.apple.com/us/app/my-wallet',
    chrome: 'https://chrome.google.com/webstore/detail/my-wallet',
    qrCode: 'https://my-wallet/qr',
  },
  mobile: {
    getUri: (uri: string) => uri,
  },
  qrCode: {
    getUri: (uri: string) => uri,
    instructions: {
      learnMoreUrl: 'https://my-wallet/learn-more',
      steps: [
        {
          description:
            'We recommend putting My Wallet on your home screen for faster access to your wallet.',
          step: 'install',
          title: 'Open the My Wallet app',
        },
        {
          description:
            'After you scan, a connection prompt will appear for you to connect your wallet.',
          step: 'scan',
          title: 'Tap the scan button',
        },
      ],
    },
  },
  extension: {
    instructions: {
      learnMoreUrl: 'https://my-wallet/learn-more',
      steps: [
        {
          description:
            'We recommend pinning My Wallet to your taskbar for quicker access to your wallet.',
          step: 'install',
          title: 'Install the My Wallet extension',
        },
        {
          description:
            'Be sure to back up your wallet using a secure method. Never share your secret phrase with anyone.',
          step: 'create',
          title: 'Create or Import a Wallet',
        },
        {
          description:
            'Once you set up your wallet, click below to refresh the browser and load up the extension.',
          step: 'refresh',
          title: 'Refresh your browser',
        },
      ],
    },
  },
  createConnector: getWalletConnectConnector({ projectId }),
});
```

그런 다음 [지갑 목록](/docs/custom-wallet-list)에 사용자 정의 지갑을 추가할 수 있습니다.
